package cn.ffcs.uec.staff.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import lombok.Getter;
import lombok.Setter;
import cn.ffcs.uec.common.vo.UecBdDefdoc;
import cn.ffcs.uec.common.vo.UecWaPrmlv;
import cn.ffcs.uec.common.vo.UecWaSeclv;
import cn.ffcs.uec.outStaff.model.UecOutStaffInfo;
import cn.ffcs.uec.salary.model.UecSalaryProject;
import cn.ffcs.uec.staff.dao.UecPsndocWadocDao;
import cn.ffcs.uom.common.constants.BaseUnitConstants;
import cn.ffcs.uom.common.model.UomEntity;
import cn.ffcs.uom.common.util.ApplicationContextUtil;
import cn.ffcs.uom.common.util.StrUtil;

/**
 * @Title:薪资变动情况 实体类
 * @Description:
 * @Copyright: FFCS（C） 2017
 * @Company: FFCS
 * @author Wang Yiren
 * @Version 0.0.1 date:2017年12月14日
 * @since JDK1.6
 */
public class UecPsndocWadoc extends UomEntity implements Serializable,Cloneable {

	private static final long serialVersionUID = -3619650697922141030L;

	/**
	 * 薪资变动情况标识
	 * 
	 * @return
	 */
	public Long getWadocId() {
		return super.getId();
	}

	public void setWadocId(Long wadocId) {
		super.setId(wadocId);
	}

	/**
	 * 员工标识
	 */
	@Getter
	@Setter
	private Long staffId;
	/**
	 * 员工类型 =1：合同制、派遣制 =2：外包自有、其他
	 */
	@Getter
	@Setter
	private String nmStaffType;
	/**
	 * 账期
	 */
	@Getter
	@Setter
	private Long monthId;
	/**
	 * 人员子表主键
	 */
	@Getter
	@Setter
	private String pkPsndocSub;
	/**
	 * 人员基本信息
	 */
	@Getter
	@Setter
	private String pkPsndoc;
	/**
	 * 人员任职记录
	 */
	@Getter
	@Setter
	private String pkPsnjob;
	/**
	 * 是否是谈判工资--negotiationWage
	 */
	@Getter
	@Setter
	private String negotiationWage;
	/**
	 * 是否是来自于流程
	 */
	@Getter
	@Setter
	private String workflowflag;
	/**
	 * 薪资起始日期
	 */
	@Getter
	@Setter
	private String begindate;
	/**
	 * 薪资截止日期
	 */
	@Getter
	@Setter
	private String enddate;
	/**
	 * 工资年度
	 */
	@Getter
	@Setter
	private String cyear;
	/**
	 * 工资期间
	 */
	@Getter
	@Setter
	private String cperiod;
	/**
	 * 业务类型
	 */
	@Getter
	@Setter
	private Long iadjustmatter;
	/**
	 * 最近记录标志
	 */
	@Getter
	@Setter
	private String lastflag;
	/**
	 * 薪资项目
	 */
	@Getter
	@Setter
	private String pkWaItem;
	/**
	 * 薪资标准
	 */
	@Getter
	@Setter
	private String pkWaCrt;
	/**
	 * 金额
	 */
	@Getter
	@Setter
	private Double nmoney;
	/**
	 * 薪资标准类别
	 */
	@Getter
	@Setter
	private String pkWaGrd;
	/**
	 * 发放标志
	 */
	@Getter
	@Setter
	private String waflag;
	/**
	 * 薪资调整日期
	 */
	@Getter
	@Setter
	private String changedate;
	/**
	 * 变动原因--pkChangecause
	 */
	@Getter
	@Setter
	private String pkChangecause;
	/**
	 * 试用期工资
	 */
	@Getter
	@Setter
	private Double nprobationwage;
	/**
	 * 依据文件
	 */
	@Getter
	@Setter
	private String vbasefile;
	/**
	 * 备注
	 */
	@Getter
	@Setter
	private String vnote;
	/**
	 * 所属组织
	 */
	@Getter
	@Setter
	private String pkOrg;
	/**
	 * 标准金额
	 */
	@Getter
	@Setter
	private Double criterionvalue;
	/**
	 * 薪资标准级别
	 */
	@Getter
	@Setter
	private String pkWaPrmlv;
	/**
	 * 薪资标准档别
	 */
	@Getter
	@Setter
	private String pkWaSeclv;
	/**
	 * 兼职
	 */
	@Getter
	@Setter
	private String partflag;
	/**
	 * 删除标识
	 */
	@Getter
	@Setter
	private Long dr;
	/**
	 * 时间戳
	 */
	@Getter
	@Setter
	private String ts;
	/**
	 * 创建人
	 */
	@Getter
	@Setter
	private String creator; 
	/**
	 * 创建时间
	 */
	@Getter
	@Setter
	private String creationtime; 
	/**
	 * 修改人
	 */
	@Getter
	@Setter
	private String modifier; 
	/**
	 * 修改时间
	 */
	@Getter
	@Setter
	private String modifiedtime; 
	

	/**
	 * 创建对象实体
	 * 
	 * @return
	 */
	public static UecPsndocWadoc newInstance() {
		return new UecPsndocWadoc();
	}

	/**
	 * 获取dao
	 * 
	 * @return
	 */
	public UecPsndocWadocDao repository() {
		return (UecPsndocWadocDao) ApplicationContextUtil.getBean("uecPsndocWadocDao");
	}

	/**
	 * 获取员工姓名
	 */
	public String getOutStaffName() {
		if (!StrUtil.isNullOrEmpty(this.getStaffId())) {
			String sql = " SELECT * FROM  UEC_OUT_STAFF_INFO T WHERE T.OUT_STAFF_ID = ? ";
			List<Object> params = new ArrayList<Object>();
			/*params.add(BaseUnitConstants.ENTT_STATE_ACTIVE);*/
			params.add(this.getStaffId());
			UecOutStaffInfo uecOutStaffInfo = this.repository().jdbcFindObject(sql, params, UecOutStaffInfo.class);
			if (uecOutStaffInfo != null) {
				return uecOutStaffInfo.getPsnName();
			}
		}
		return null;
	}

	/**
	 * 获取员工编码
	 */
	public String getOutStaffCode() {
		if (!StrUtil.isNullOrEmpty(this.getStaffId())) {
			String sql = " SELECT * FROM  UEC_OUT_STAFF_INFO T WHERE T.OUT_STAFF_ID = ? ";
			List<Object> params = new ArrayList<Object>();
			/*params.add(BaseUnitConstants.ENTT_STATE_ACTIVE);*/
			params.add(this.getStaffId());
			UecOutStaffInfo uecOutStaffInfo = this.repository().jdbcFindObject(sql, params, UecOutStaffInfo.class);
			if (uecOutStaffInfo != null) {
				return uecOutStaffInfo.getPsnCode();
			}
		}
		return null;
	}

	/**
	 * 是否是谈判工资--negotiationWage
	 */
	public String getNegotiationWageName() {
		if (!StrUtil.isNullOrEmpty(this.getNegotiationWage())) {
			if ("N".equals(this.getNegotiationWage())) {
				return "否";
			} else if ("Y".equals(this.getNegotiationWage())) {
				return "是";
			}
		}
		return "";
	}

	/**
	 * 是否是来自于流程
	 */
	public String getWorkflowflagName() {
		if (!StrUtil.isNullOrEmpty(this.getWorkflowflag())) {
			if ("N".equals(this.getWorkflowflag())) {
				return "否";
			} else if ("Y".equals(this.getWorkflowflag())) {
				return "是";
			}
		}
		return "";
	}

	/**
	 * 薪资项目--pkWaItem
	 */
	public String getPkWaItemName() {
		if (!StrUtil.isNullOrEmpty(this.getPkWaItem())) {
			String sql = " SELECT * FROM  UEC_SALARY_PROJECT T WHERE T.STATUS_CD = ? AND T.PK_WA_ITEM = ? ";
			List<Object> params = new ArrayList<Object>();
			params.add(BaseUnitConstants.ENTT_STATE_ACTIVE);
			params.add(this.getPkWaItem());
			List<UecSalaryProject> list = this.repository().jdbcFindList(sql, params, UecSalaryProject.class);
			if (list != null && list.size() > 0) {
				return list.get(0).getName();
			}
		}
		return "";
	}

	/**
	 * 薪资标准类别--pkWaGrd
	 */
	public String getPkWaGrdName() {
		if (!StrUtil.isNullOrEmpty(this.getPkWaGrd())) {
			if ("1001A1100000000B2DPQ".equals(this.getPkWaGrd())) {
				return "集团薪资标准（新岗新体系）";
			} else if ("1001A1100000000A7FIO".equals(this.getPkWaGrd())) {
				return "集团薪资标准（旧岗新体系）";
			} else if ("1001A1100000000A83WH".equals(this.getPkWaGrd())) {
				return "内蒙古薪资标准（旧岗新体系）";
			} else if ("1001A1100000000TRON2".equals(this.getPkWaGrd())) {
				return "薪资表（旧体系）";
			}
		}
		return "";
	}

	/**
	 * 发放标志--waflag
	 */
	public String getWaflagName() {
		if (!StrUtil.isNullOrEmpty(this.getWaflag())) {
			if ("N".equals(this.getWaflag())) {
				return "否";
			} else if ("Y".equals(this.getWaflag())) {
				return "是";
			}
		}
		return "";
	}

	/**
	 * 兼职--partflag
	 */
	public String getPartflagName() {
		if (!StrUtil.isNullOrEmpty(this.getPartflag())) {
			if ("N".equals(this.getPartflag())) {
				return "否";
			} else if ("Y".equals(this.getPartflag())) {
				return "是";
			}
		}
		return "";
	}

	/**
	 * 薪资标准级别--pkWaPrmlv
	 */
	public String getPkWaPrmlvName() {
		if (!StrUtil.isNullOrEmpty(this.getPkWaPrmlv())) {
			String sql = " SELECT * FROM  UEC_WA_PRMLV T WHERE T.PK_WA_PRMLV = ? ";
			List<Object> params = new ArrayList<Object>();
			params.add(this.getPkWaPrmlv());
			List<UecWaPrmlv> list = this.repository().jdbcFindList(sql, params, UecWaPrmlv.class);
			if (list != null && list.size() > 0) {
				return list.get(0).getLevelName();
			} else {
				return this.getPkWaPrmlv();
			}
		}
		return "";
	}

	/**
	 * 薪资标准档别--pkWaSeclv
	 */
	public String getPkWaSeclvName() {
		if (!StrUtil.isNullOrEmpty(this.getPkWaSeclv())) {
			String sql = " SELECT * FROM  UEC_WA_SECLV T WHERE T.PK_WA_SECLV = ? ";
			List<Object> params = new ArrayList<Object>();
			params.add(this.getPkWaSeclv());
			List<UecWaSeclv> list = this.repository().jdbcFindList(sql, params, UecWaSeclv.class);
			if (list != null && list.size() > 0) {
				return list.get(0).getLevelName();
			} else {
				return this.getPkWaSeclv();
			}
		}
		return "";
	}

	/**
	 * 变动原因--pkChangecause
	 */
	public String getPkChangecauseName() {
		if (this.getPkChangecause() != null) {
			String sql = "SELECT * FROM UEC_BD_DEFDOC WHERE PK_DEFDOC = ? ";
			List<Object> params = new ArrayList<Object>();
			params.add(this.getPkChangecause());
			List<UecBdDefdoc> list = this.repository().jdbcFindList(sql, params, UecBdDefdoc.class);
			if (list != null && list.size() > 0) {
				return list.get(0).getName();
			} else {
				return this.getPkChangecause();
			}
		}
		return null;
	}
	
	/**
	 * 最近记录标志
	 */
	public String getLastflagName() {
		if (!StrUtil.isNullOrEmpty(this.getLastflag())) {
			if ("N".equals(this.getLastflag())) {
				return "否";
			} else if ("Y".equals(this.getLastflag())) {
				return "是";
			}
		}
		return "";
	}
	
	@Override
	public Object clone() {
		UecPsndocWadoc psndocWadoc = null;
		try {
			psndocWadoc = (UecPsndocWadoc) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return psndocWadoc;
	}
}
